package daos;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashSet;
import java.util.Set;

import tabelas.Curso;
import tabelas.Estudante;

public class CursoDAO 
{
	
	public static void salva(Curso curso)
	{
		Connection c;
		try {
			c = Conexao.get();
		
		c.createStatement().executeUpdate("insert into curso (nome) values ( '"+ curso.getNome()+"')");
		
		c.commit();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public static Curso carrega(Integer id) 
	{
		Curso curso = new Curso();
		ResultSet result = null;
		try {
			result = Conexao.get().createStatement().executeQuery("select * from curso where id = "+id.toString());
			if(result.next() == false)
				return null;
		
			curso.setId(result.getInt("id"));
			curso.setNome(result.getString("nome"));
			curso.setEstudantes(new HashSet<Estudante>());
			
			
			ResultSet result2 = Conexao.get().createStatement().executeQuery("select * from estudante where curso_id = "+id.toString());
			while(result2.next())
			{
				curso.getEstudantes().add(EstudanteDAO.carregaEspecial(result2.getInt("id"), curso));
			}
		
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return curso;
	}
	
	public static void atualiza(Curso curso) {
		try {
			Connection c = Conexao.get();
			
//			Set<Estudante> 
			ResultSet result2 = Conexao.get().createStatement().executeQuery("select * from estudante where curso_id = "+curso.getId().toString());
			while(result2.next())
			{
				Estudante e = new Estudante();
				e.setId(result2.getInt("id"));
				e.setNome(result2.getString("nome"));
				e.setCurso(curso);
				curso.getEstudantes().add(e);
			}
			
			c.createStatement().executeUpdate("update curso set nome = '"+ curso.getNome() + "' where id = " + curso.getId().toString());
			
			c.commit();
		} catch (SQLException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
	}
	
	public static void exclui(Curso curso)
	{
		try {
			Connection c = Conexao.get();
			
			c.createStatement().executeUpdate("delete from curso where id = " + curso.getId().toString());
			
			c.commit();
		} catch (SQLException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
	}
	
	public static Curso carregaEspecial(Integer id, Set<Estudante> set) 
	{
		Curso curso = new Curso();
		ResultSet result = null;
		try {
			result = Conexao.get().createStatement().executeQuery("select * from curso where id = "+id.toString());
			if(result.next() == false)
				return null;
		
			curso.setId(result.getInt("id"));
			curso.setNome(result.getString("nome"));
			curso.setEstudantes(new HashSet<Estudante>());
			
			
			ResultSet result2 = Conexao.get().createStatement().executeQuery("select * from estudante where curso_id = "+id.toString());
			while(result2.next())
			{
				for(Estudante e : set)
					if(e.getId().equals(result2.getInt("id")) == false)
					{
						Estudante e2 = EstudanteDAO.carregaEspecial(result2.getInt("id"), curso);
						curso.getEstudantes().add(e);
						set.add(e2);
					}
					else
						curso.getEstudantes().add(e);
			}
		
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return curso;
	}

}
